Add a release-manager agent for the dotnet/extensions release process#7643
Merged
jeffhandley merged 15 commits intoJul 23, 2026
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Adds a new .github agent, release-manager, to guide the end-to-end dotnet/extensions monthly + servicing release process via four playbooks (prepare-release, publish-release, validate-release, write-release-notes), including staged reference docs and a Source Link validation script.
Changes:
- Introduces the
release-manageragent definition plus playbook READMEs and stage reference documentation for preparing, publishing/promoting, validating, and writing release notes. - Adds a PowerShell script to validate symbol availability + Source Link for published packages.
- Adds structured release-notes guidance (SQL schema/queries, package-to-area mapping, experimental API tracking, formatting templates, and PR collection/dedup rules).
Reviewed changes
Copilot reviewed 16 out of 20 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| .github/agents/release-manager.agent.md | Defines the new release-manager agent and its operating rules + playbook entrypoints. |
| .github/agents/release-manager/prepare-release/README.md | Playbook overview and stage workflow for preparing a release. |
| .github/agents/release-manager/prepare-release/references/stage-1-prepare-internal-branch.md | Stage doc for internal-branch prep steps. |
| .github/agents/release-manager/prepare-release/references/stage-2-update-dependencies.md | Stage doc for darc-driven dependency updates. |
| .github/agents/release-manager/publish-release/README.md | Playbook overview for landing, publishing, and promoting the release build. |
| .github/agents/release-manager/publish-release/references/stage-1-land.md | Stage doc for landing the staged branch and running official builds. |
| .github/agents/release-manager/publish-release/references/stage-2-publish-and-promote.md | Stage doc for NuGet publishing (user-gated) and channel promotion. |
| .github/agents/release-manager/validate-release/README.md | Playbook overview for symbol/Source Link verification and branch reconciliation. |
| .github/agents/release-manager/validate-release/references/stage-1-verify-source-link.md | Stage doc for running the Source Link validation sweep. |
| .github/agents/release-manager/validate-release/references/stage-2-reconcile-branches.md | Stage doc for internal→public→main merge choreography. |
| .github/agents/release-manager/validate-release/references/stage-3-support-page.md | Stage doc for verifying the external support-page update. |
| .github/agents/release-manager/validate-release/scripts/Test-SourceLink.ps1 | Script to validate symbol-server availability and Source Link for shipped packages. |
| .github/agents/release-manager/write-release-notes/README.md | Playbook overview for drafting GitHub release notes. |
| .github/agents/release-manager/write-release-notes/references/sql-storage.md | SQL schema + query patterns for release-notes data shaping. |
| .github/agents/release-manager/write-release-notes/references/package-areas.md | Mapping from src/Libraries/* package paths to release-notes “area groups”. |
| .github/agents/release-manager/write-release-notes/references/format-template.md | Markdown templates/rules for full vs patch release notes. |
| .github/agents/release-manager/write-release-notes/references/experimental-features.md | Guidance for auditing and reporting experimental API changes. |
| .github/agents/release-manager/write-release-notes/references/collect-prs.md | Process for collecting and deduplicating PRs in the release window. |
| .github/agents/release-manager/write-release-notes/references/categorize-entries.md | Rules for categorizing PRs into release-note sections. |
| .github/agents/release-manager/write-release-notes/references/editorial-rules.md | Editorial standards for tone/structure of release notes. |
- Move the detailed internal-branch preparation steps into references/stage-1-prepare-internal-branch.md - Slim SKILL.md to a staged overview that points to the Stage 1 reference file - Add a Stage workflow section requiring per-stage (and per-sub-stage) review, approval, and a separate commit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add references/stage-2-update-dependencies.md with .NET 9, .NET 8, and .NET 10 dependency-update sub-stages - Direct the user to release.dot.net artifacts and accept manifests/ReleaseManifest.json by paste or local path to read barBuildIds - Validate each id with darc get-build before darc update-dependencies; require darc auth prerequisite - Encode per-sub-stage commits, NuGet.config keep-both feeds, and the LTSVersion/Net10Version Versions.props edits - Revert Version.Details.xml for 8.0 and 10.0, revert eng/common for 10.0, and keep the Arcade Templating entries - Add a Stage 2 pointer section to SKILL.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: f88e403f-7492-48d8-bb79-d987bd99ddc5
Includes Test-SourceLink.ps1 for automated Source Link / symbol-server validation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: f88e403f-7492-48d8-bb79-d987bd99ddc5
Automates staging the internal-to-public and release-to-main merges (with the infra-file doctoring and stabilization revert); pushing and PR completion remain user-directed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: f88e403f-7492-48d8-bb79-d987bd99ddc5
…t 5 releases Adds an anomaly-vs-consistency check (versioning present, infra absent, skill/tooling excluded, expected backports) against the previous five releases' corresponding merge PRs before committing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: f88e403f-7492-48d8-bb79-d987bd99ddc5
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…o match Option 1 Preserves each sub-stage commit as linear history for auditability, consistent with the direct-push option. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
dotnet/extensions publishes symbols to msdl, not symbols.nuget.org; the script now queries --microsoft-symbol-server (with the nuget server as a fallback), so it no longer reports false symbols-not-indexed for valid releases. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…in-PR numbers Add a dedup step that lists every PR merged into the prior release branch and harvests the #NNNN references from each PR's title and body, excluding candidates whose number appears in that set. This covers single-PR backports (e.g. dotnet#7547 -> dotnet#7546) and aggregate backports that carry many main PRs with no title twin (e.g. dotnet#7402 -> thirteen PRs). Keep title equivalence as a fallback for backports that omit the reference, and require the ancestry, notes-body, reference-harvest, and title checks to all run before marking candidates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Move the release-specific skills out of .github/skills into a repo-local release-manager agent (.github/agents/release-manager) so they load only when the agent is selected rather than always being in scope. The agent orchestrates four playbooks: prepare-release (prepare the internal branch, update .NET dependencies), publish-release (land the branch, publish to nuget.org, promote the shipping build to the public channel so symbols reach msdl), validate-release (verify Source Link and symbols, reconcile the internal/public/main branches, confirm the support-page update), and write-release-notes (draft GitHub release notes for a tag). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Normalize the end-to-end stage numbering, correct workflow and script references, make Source Link validation portable, add timeless starter prompts for release-manager sessions, and classify workflow changes as release-note infrastructure. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d88cce81-2b82-459a-a747-f456ea15a180
- Add servicing-release-prep.md playbook covering candidate selection, cherry-pick workflow, PR template with clean/conflict notation, and DO-NOT-SQUASH + rebase-and-merge guidance - Add Stage 3 build references for monthly and servicing tracks (stage-3-build-monthly.md, stage-3-build-servicing.md); rename from stage-3-land.md - Update publish/validate/write-release-notes to be track-aware: scope anchored to servicing-prep PR description for servicing releases - Add starter prompts and session-state assessment guidance to agent - Standardize terminology: 'monthly release' and 'servicing release' throughout; remove 'shipping build' in favor of 'official release build' Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d88cce81-2b82-459a-a747-f456ea15a180
jeffhandley
force-pushed
the
jeffhandley/release-process
branch
from
July 21, 2026 02:33
f6686eb to
d95a798
Compare
jeffhandley
enabled auto-merge (squash)
July 21, 2026 02:43
jozkee
approved these changes
Jul 21, 2026
Contributor
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 19 out of 22 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (2)
.github/agents/release-manager/prepare-release/references/stage-1-prepare-internal-branch.md:68
- The YAML snippet uses
$(<private-feed-read-token>), which isn’t valid Azure Pipelines variable syntax and will fail if copied verbatim. Use a syntactically valid placeholder variable name (and let the user substitute their real secret variable name/value).
.github/agents/release-manager/prepare-release/references/stage-1-prepare-internal-branch.md:77 - Same issue as above:
$(<private-feed-read-token>)is not valid Azure Pipelines syntax. Use a valid placeholder variable reference so the snippet can be copy/pasted safely.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: d88cce81-2b82-459a-a747-f456ea15a180
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a
release-manageragent that owns the dotnet/extensions monthly and servicing release process, consolidating the formerprepare-releaseandwrite-release-notesskills into a single agent with four focused playbooks under.github/agents/release-manager/:Version.Details.xml/ non-suffixed...Versionentries, with .NET 8 (...LTSVersion) and .NET 10 (...Net10Version) layered on top. For a servicing release it backports the selectedmaincommits ontorelease/<major>.<minor>and bumps the patch version. Pushes only after each commit is reviewed.internal/release/<major>.<minor>and runs the official build. Servicing: after the servicing-prep PR merges into the publicrelease/<major>.<minor>branch, runs the official build from there. Both tracks then publish the in-scope packages to nuget.org and ensure the shipping build is on the public.NET <major>channel so symbols reach the Microsoft symbol server (msdl). Publishing is human-gated: the agent stages the package set and provides a user-run secure key-entry helper (Sublime Text / VS Code / Notepad) so the nuget.org API key is entered, used, and shredded on the user's own machine and never handled by the agent, and the user is reminded to delete or regenerate the key afterward.Test-SourceLink.ps1), reconciles the internal, public, andmainbranches for monthly releases (skipped for servicing releases prepared directly on the public release branch), and reviews the .NET support-page update.Each playbook has a README plus staged reference files that describe its process step by step.
validate-releasealso shipsTest-SourceLink.ps1for verifying Source Link against msdl.The agent is public-safe: internal infrastructure specifics (feeds, tokens, and pipeline definitions) are deliberately kept out of the repository.
Microsoft Reviewers: Open in CodeFlow